Ana içeriğe geç

Set

Setler bizlere hızlı bir şekilde bir verinin var olup olmadığını sorgulama imkanı vermektedir. Ancak türkçeye çevirisinde de karşımıza çıkan küme sistemi gibi içerisinde birden fazla aynı verinin kopyasını taşımamaktadır.

Setler ve mapler birbirine benzer şekilde görülse de setler veri anahtar çiftinden sadece anahtara sahip olacaktır. Maplere benzer olarak Rust bizlere iki adet set sunmaktadır.

  • Hash Set
  • Binary Set

İkiside birbirine benzer olmaktadır. Bu nedenle sadece hashseti göreceğiz. İlk olarak main.rs dosyamızın içerisine hashseti ekleyerek başlayabiliriz.

use std::colections::HashSet

Sonrasında mutable bir hashset oluşturabiliriz.

let mut hs = HashSet::new();

Aynı şekilde map değerleri gibi len ve is_empty methodlarını kullanmamız mümkündür.

Hashset içerisine insert ile veri ekleyebiliriz. Bu fonksiyon içerisine tek eleman almaktadır. Bu eleman da verinin ta kendisi olmaktadır.

hs.insert(1);
hs.insert(2);
hs.insert(3);
hs.insert(4);

Eklediğimiz bu değerleri ekrana yazdırırken daha sonra da ayrıntılı göreceğimiz iter() yapısınu kullanabiliriz.

for x in hs.item(){
println!("iter: {}", x);
}

Aynı şekilde hashset içerisinden veri yok etmek de mümkündür. Bu işlemi remove() ile referansları kullanarak gerçekleştirebiliriz.

Hadi setlerin diğer özelliklerini gösterebilmek için yeni bir set oluşturalım.

let mut hs2 = HashSet::new();

hs2.insert(1);
hs2.insert(3);
hs2.insert(5);
hs2.insert(7);

Set ifadelerinin bir diğer farklı kılan özelliği de iki set içerisindeki kesişimleri bulabilmektir. Bu işlemi yaparken for döngüsü içeisinde intersection() methodunu kullanabiliriz.

for x in hs.intersections(&hs2){
println!("Intersections: {}", x)
}
Intersetions: 1
Intersetions: 3

Ancak bu işlemi bir for döngüsü kullanmadan tek satırda gerçekleştirmek de mümkündür. Bu işlemi yapabilmek için binary operator ifadelerinden biri olan AND(&) ifadesini kullanabiliriz.

let kesisimler = &hs & &hs2; 

Diğer bir özelliğimiz de iki hashseti birbiri ile birleştirmemize yarayan union kullanımıdır. Bu işlemide yine binary işlemlerden biri olan OR(|) ifadesi ile gerçekleştirebiliriz.

let birlesim = &hs | &hs2;

Burada dikkat etmemiz gereken olay birleşimi oluştururken tekrar eden verilerin sadece bir kez yer almasıdır.

Son olarak setler içerisinde iki kümenin birbirinden farkına bakabiliriz. Bu işlem için - ifadesini kullanabiliriz.

let fark = &hs - &hs2;